A debugger or debugging tool is a computer program that is used to test and debug other programs (e.g., the target program). A “crash” happens when the program cannot normally continue because it has encountered a programming bug. When the program crashes or reaches a preset condition, the debugger typically identifies the location in the original code that caused the crash if it is a source-level debugger or symbolic debugger. If it is a low-level debugger or a machine-language debugger it identifies the line in the disassembly (unless it also has online access to the original source code and can display the appropriate section of code from the assembly or compilation).
Modern day processors have to be debugged in a system in a lab setting. Debug architecture requires that for an invasive debug operation, debugger software be executed by the processor under debug (PUD). If the functionality of processor under debug is compromised such that the processor is unable to run even the debugger software itself, then debug of such processor is impossible. Consequently, conventional approaches that rely on a potentially compromised PUD to execute debug instructions are inadequate.
It should be noted that like reference numbers refer to like elements in the figures.